package com.project.fortuneteller.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESedeKeySpec;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.security.spec.InvalidKeySpecException;

@Configuration
public class PassWordConfig {

    /**
     * 生成密钥
     * @return
     * @throws NoSuchAlgorithmException
     * @throws InvalidKeyException
     * @throws InvalidKeySpecException
     */

   @Bean
    public SecretKey getSecretKey() throws NoSuchAlgorithmException, InvalidKeyException, InvalidKeySpecException {
        // 生成key
        KeyGenerator keyGenerator=KeyGenerator.getInstance("DESede");
       //3DES需要112 or 168位
        keyGenerator.init(112);
       //或者使用这种方式默认长度，无需指定长度
        keyGenerator.init(new SecureRandom());
       //生成key的材料
        SecretKey secretKey = keyGenerator.generateKey();
       //生成key
        byte[] key = secretKey.getEncoded();

        // key转换成密钥（自己指定字节数组时需要转换）
        DESedeKeySpec desKeySpec=new DESedeKeySpec(key);
        //  指定的 密钥的生成方式
        SecretKeyFactory factory= SecretKeyFactory.getInstance("DESede");
        //转换后的密钥
        return factory.generateSecret(desKeySpec);
    }

}
